package top.hudk.design.observer;


import java.util.ArrayList;
import java.util.List;

/**
 * 作用：上课铃响
 *
 * @author hudk
 * @date 2021/5/14 9:29
 */
public abstract class AbsLessonBellSubject implements ISubject {


    /**
     * 观察者列表
     */
    private List<IObserver> observers = new ArrayList<>();

    /**
     * 添加注册观察者
     * @param observer
     */
    @Override
    public void attach(IObserver observer) {
        observers.add(observer);
    }


    /**
     * 事件
     * (模板方法模式)
     */
    @Override
    public final void bellRings(){
        this.eventProcess();
        this.notifyAllObserver();
    }

    /**
     * 事件处理过程方法
     */
    public abstract void eventProcess();

    /**
     * 通知所有观察者
     */
    public void notifyAllObserver() {
        for (IObserver observer : observers){
            observer.update();
        }
    }
}
